import axios from 'axios';

/**
 * 普通 AI 回答
 * @param message 用户消息
 * @param chatId 聊天会话ID
 * @returns AI回答
 */
export function sendChatMessage(message: string, chatId: string): Promise<string> {
    return axios.get('/api/ai/chat/sync', {
        params: {
            message,
            chatId
        }
    }).then(res => res.data);
}

/**
 * 流式 AI 回答
 * @param message 用户消息
 * @param chatId 聊天会话ID
 * @param documentId 文档ID
 * @param onMessage 接收消息回调
 * @param onError 错误回调
 * @param onComplete 完成回调
 * @returns 关闭连接的函数
 */
export function sendStreamingChatMessage(
    message: string,
    chatId: string,
    documentId?: string,
    onMessage?: (chunk: string) => void,
    onError?: (error: Event) => void,
    onComplete?: () => void
): (() => void) {
    // 安全构建 URL 参数 [4,8](@ref)
    const params = new URLSearchParams();
    params.append('message', message);
    params.append('chatId', chatId);

    // 仅当 documentId 存在时添加 [6,7](@ref)
    if (documentId !== undefined && documentId !== null) {
        params.append('documentId', documentId);
    }

    const url = `/api/ai/chat/sse?${params.toString()}`;

    console.log('创建EventSource连接:', url);

    const eventSource = new EventSource(url);

    // 使用可选链安全访问回调函数 [6,7](@ref)
    eventSource.onopen = (event) => {
        console.log('EventSource连接已打开:', event);
    };

    eventSource.onmessage = (event) => {
        console.log('收到SSE消息:', event.data);
        if (event.data === '[DONE]') {
            console.log('收到完成信号 [DONE]，正常关闭连接');
            eventSource.close();
            onComplete?.(); // 使用可选链调用
        } else {
            onMessage?.(event.data); // 使用可选链调用
        }
    };

    eventSource.onerror = (error) => {
        if (eventSource.readyState === 0 || eventSource.readyState === 2) {
            console.log('SSE连接已关闭，状态:', eventSource.readyState);
            eventSource.close();
            onComplete?.(); // 使用可选链调用
        } else {
            console.error('SSE连接错误:', error);
            console.error('EventSource readyState:', eventSource.readyState);
            eventSource.close();
            onError?.(error); // 使用可选链调用
        }
    };

    return () => {
        console.log('手动关闭EventSource连接');
        eventSource.close();
    };
}

/**
 * 生成唯一聊天ID
 * @returns 聊天ID
 */
export function generateChatId(): string {
    return `chat_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
}

/**
 * 流式调用 Manus 超级智能体
 * 
 * @param message 用户消息
 * @param documentId 文档ID
 * @param onMessage 接收消息回调
 * @param onError 错误回调
 * @param onComplete 完成回调
 * @returns 关闭连接的函数
 */
export function sendManusStreamingChatMessage(
    message: string,
    documentId?: string,
    onMessage?: (chunk: string) => void,
    onError?: (error: Event) => void,
    onComplete?: () => void
): (() => void) {
    // 安全构建 URL 参数
    const params = new URLSearchParams();
    params.append('message', message);
    
    // 仅当 documentId 存在时添加
    if (documentId !== undefined && documentId !== null) {
        params.append('documentId', documentId);
    }

    const url = `/api/ai/manus/chat?${params.toString()}`;

    console.log('创建Manus EventSource连接:', url);

    const eventSource = new EventSource(url);

    eventSource.onopen = (event) => {
        console.log('Manus EventSource连接已打开:', event);
    };

    eventSource.onmessage = (event) => {
        console.log('收到Manus SSE消息:', event.data);
        if (event.data === '[DONE]') {
            console.log('收到完成信号 [DONE]，正常关闭连接');
            eventSource.close();
            onComplete?.();
        } else {
            onMessage?.(event.data);
        }
    };

    eventSource.onerror = (error) => {
        console.error('Manus SSE连接错误:', error);
        eventSource.close();
        onError?.(error);
    };

    return () => {
        console.log('手动关闭Manus EventSource连接');
        eventSource.close();
    };
}
